﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FONCREAGROINTEGRAL.Models;

namespace FONCREAGROINTEGRAL.Controllers
{
    public class ausenciaController : Controller
    {
        public SistIntFoncreagroEntities entidades = new SistIntFoncreagroEntities();
        //
        // GET: /ausencia/
        
        public ActionResult Index(int id)
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string motivo = Convert.ToString(Request.QueryString["query"]);


            var query = entidades.AUSENCIAs
                .Join(entidades.PERIODOLABORALs, au => au.IdPeriodoLaboral, pl => pl.IdPeriodoLaboral, (au, pl) => new { 
                au.FechaInicio,au.IdMotivoAusencia,au.idejerciciomes,au.IdAusencia,au.FechaFin,au.NroArchivo,au.editable,au.Comentario,pl.IdPersonal})
                .Where(pl=>pl.IdPersonal == id);

            var result = (from a in query.OrderByDescending(a => a.FechaInicio).Skip(start).Take(limit).ToList()
                          join ma in entidades.MOTIVOAUSENCIAs on a.IdMotivoAusencia equals ma.IdMotivoAusencia
                          join em in entidades.EJERCICIOMES on a.idejerciciomes equals em.idejerciciomes
                          join ea in entidades.EJERCICIOs on em.IdEjercicio equals ea.IdEjercicio
                          select new
                          {
                              Id = a.IdAusencia,
                              Fechainicio = string.Format("{0:d}", a.FechaInicio),
                              Fechafin = string.Format("{0:d}", a.FechaFin),
                              Motivoausencia = ma.Motivo,
                              NroArchivo = a.NroArchivo,                              
                              Mes = "Periodo: " + Convert.ToString(ea.Anio) +" -- Mes: " + mesencadena(Convert.ToInt32(em.mes)),
                              Estado = a.editable,
                              Comentario = a.Comentario
                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult Index2()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string motivo = Convert.ToString(Request.QueryString["query"]);


            var query = entidades.AUSENCIAs
                .Join(entidades.PERIODOLABORALs, au => au.IdPeriodoLaboral, pl => pl.IdPeriodoLaboral, (au, pl) => new
                {
                    au.FechaInicio,
                    au.IdMotivoAusencia,
                    au.idejerciciomes,
                    au.IdAusencia,
                    au.FechaFin,
                    au.NroArchivo,
                    au.editable,
                    au.Comentario,
                    pl.IdPersonal
                })
                .Where(pl => pl.IdPersonal == 198);

            var result = (from a in query.OrderByDescending(a => a.FechaInicio).Skip(start).Take(limit).ToList()
                          join ma in entidades.MOTIVOAUSENCIAs on a.IdMotivoAusencia equals ma.IdMotivoAusencia
                          join em in entidades.EJERCICIOMES on a.idejerciciomes equals em.idejerciciomes
                          join ea in entidades.EJERCICIOs on em.IdEjercicio equals ea.IdEjercicio
                          select new
                          {
                              Id = a.IdAusencia,
                              Fechainicio = string.Format("{0:d}", a.FechaInicio),
                              Fechafin = string.Format("{0:d}", a.FechaFin),
                              Motivoausencia = ma.Motivo,
                              NroArchivo = a.NroArchivo,
                              Mes = "Periodo: " + Convert.ToString(ea.Anio) + " -- Mes: " + mesencadena(Convert.ToInt32(em.mes)),
                              Estado = a.editable,
                              Comentario = a.Comentario
                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        //COnvertir mes en String
        public string mesencadena(int id)
        {
            var mes = "";
            switch (id)
            {
                case 1: mes = "Enero"; break;
                case 2: mes = "Febrero"; break;
                case 3: mes = "Marzo"; break;
                case 4: mes = "Abril"; break;
                case 5: mes = "Mayo"; break;
                case 6: mes = "Junio"; break;
                case 7: mes = "Julio"; break;
                case 8: mes = "Agosto"; break;
                case 9: mes = "Setiembre"; break;
                case 10: mes = "Octubre"; break;
                case 11: mes = "Noviembre"; break;
                case 12: mes = "Diciembre"; break;

            }
            return mes;
        }
        //
        // GET: /ausencia/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /ausencia/Create

        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /ausencia/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection, AUSENCIA AUSENCIA, HttpPostedFileBase Archivo)
        {
            int IdPersonal = Convert.ToInt32(Request.Form["idpersonal"]);
            string url = Request.RawUrl;
            string urlCompleta =Request.Url.ToString();
           int idPerLaboral = 0;
           int inicio = urlCompleta.Length - url.Length;
           int fin = urlCompleta.Length-1;

           var resultado = urlCompleta.Remove(inicio,url.Length);
           resultado = resultado + "/";

          if(url.Length>=18){
              //21
              string IdPersonal_IdPeriodoLaboral= url.Remove(0,10);
                char[] min = {':','/', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
                char[] mayus = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
                int l = 0;
                //int pos = 0;
                int pos2 = 0;
                int logitud = IdPersonal_IdPeriodoLaboral.Length;
                

                for (l = 0; logitud>= l; l++)
                {
                    IdPersonal_IdPeriodoLaboral = IdPersonal_IdPeriodoLaboral.Trim(min);
                    IdPersonal_IdPeriodoLaboral = IdPersonal_IdPeriodoLaboral.TrimStart(mayus);
                   // pos = IdPersonal_IdPeriodoLaboral.IndexOf('/');
                    pos2 = IdPersonal_IdPeriodoLaboral.IndexOf('!');
                };

                idPerLaboral = Int32.Parse(IdPersonal_IdPeriodoLaboral.Substring(pos2+1));
                IdPersonal = Int32.Parse(IdPersonal_IdPeriodoLaboral.Remove(pos2-1));
                            
            }
            try
            {
                var plab = entidades.PERIODOLABORALs.Single(pl=>pl.IdPersonal == IdPersonal && pl.IdMotivoFinDePeriodo == null);
                var causencia = new AUSENCIA();
                if (ModelState.IsValid)
                {
                    TryUpdateModel(causencia, collection.ToValueProvider());
                    causencia.IdPeriodoLaboral = plab.IdPeriodoLaboral;
                    causencia.idejerciciomes = idPerLaboral;
                    entidades.AddToAUSENCIAs(causencia);
                    entidades.SaveChanges();

                    if (causencia.IdMotivoAusencia == 6)
                    {
                        entidades.RHUltimosSueldos(causencia.IdAusencia, 12);
                    }

                    if (Archivo != null)
                    {

                        Archivo.SaveAs(Server.MapPath("~/Content/RRHH/Ausencia/") + Convert.ToString(causencia.IdAusencia) + ".pdf");
                    }
                    
                    // return Content("OK");
                    //return RedirectToAction("../Views/Home/Index.aspx");
                    return RedirectToAction(resultado);
                }

                return View();
            }
            catch
            {
                return View();
            }
        }



        [HttpPost]
        public ActionResult Manual(int id, FormCollection collection)
        {
            string Achivo = Request.Form["NroArchivo"];
            var FechaInicio = Request.Form["FechaInicio"];
            var FechaFin = Request.Form["FechaFin"];
            var IdMotivoAusencia = Request.Form["IdMotivoAusencia"];
            var Comentario = Request.Form["Comentario"];
            
            var query = entidades.AUSENCIAs
                .Single(p => p.IdAusencia == id);
            if (Achivo!=null)
            {
               Achivo = Achivo.Remove(0,13);

                if (Achivo.EndsWith(".pdf") || Achivo.EndsWith(".PDF"))
                {
                     char[] extension = { 'p', 'd', 'f', 'P', 'D', 'F', '.' };
                     Achivo = Achivo.TrimEnd(extension);
                     query.NroArchivo = Achivo;
                     // adjunto.SaveAs(Server.MapPath("~/Content/RRHH/Contratos/") + Convert.ToString(ccontrato.idcontratoadendapersonal) + ".pdf");
                }

                
            }
     

            try
            {
                TryUpdateModel(query);
                entidades.SaveChanges();
                return Content("OK");
              
            }
            catch
            {
                return Content("ERROR");
            }
        }



        public ActionResult Edit(int id)
        {
            var eausencia = entidades.AUSENCIAs.Single(a => a.IdAusencia == id);
            return View(eausencia);
        }

        //
        // POST: /ausencia/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection, HttpPostedFileBase Archivo)
        {
            var eausencia = entidades.AUSENCIAs.Single(a => a.IdAusencia == id);
            try
            {
                // TODO: Add update logic here
                if (ModelState.IsValid)
                {
                    TryUpdateModel(eausencia);
                    entidades.SaveChanges();
                    if (Archivo != null)
                    {
                        Archivo.SaveAs(Server.MapPath("~/Content/RRHH/Ausencia/") + Convert.ToString(eausencia.IdAusencia) + ".pdf");
                    }
                    return Content("OK");
                }
                return RedirectToAction("Index");
            }
            catch
            {
                return View(eausencia);
            }
        }

        //
        // GET: /ausencia/Delete/5
 
        public ActionResult Delete(int id)
        {
            return View();
        }

        //
        // POST: /ausencia/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
